/* Reads a 128 kB file into static data and "sorts" the bytes in
   it, using counting sort, a single-pass algorithm.  The sorted
   data is written back to the same file in-place. */

#include <debug.h>
#include <syscall.h>
#include "tests/lib.h"
#include "tests/main.h"
#include <stdio.h>

unsigned char buf[128 * 1024];
size_t histogram[256];

int main(int argc UNUSED, char *argv[])
{
  // printf("begin\n");
  int handle;
  unsigned char *p;
  size_t size;
  size_t i;
  // printf("arg %s\n", argv[1]);
  // printf("here\n");
  test_name = "child-sort";
  quiet = true;
  CHECK((handle = open(argv[1])) > 1, "open \"%s\"", argv[1]);
  // printf("after open\n");
  size = read(handle, buf, sizeof buf);

  for (i = 0; i < size; i++)
    histogram[buf[i]]++;
  p = buf;

  for (i = 0; i < sizeof histogram / sizeof *histogram; i++)
  {
    size_t j = histogram[i];
    while (j-- > 0)
      *p++ = i;
  }
  seek(handle, 0);
  write(handle, buf, size);
  close(handle);

  return 123;
}
